package sui.utils.email;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.util.UUID;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/**
 * <p>
 * Description: 发送邮件
 * <p>
 * 
 * @author XQF SUI
 * @Created: 2015年11月22日 下午5:17:08
 * @version 1.0
 */
public class SendMail {
	// 格式化
	public final static DecimalFormat DF = new DecimalFormat("0");
	
	// 文件路径及文件名称
	public static final String FILE_PATH = "F:\\window\\Desktop\\data(3).xlsx";
	// 附件
	public static final String ATTR_FILE_PATH = "F:\\window\\Desktop\\2017年8月《宜信财富尊享客户月报》.pdf";
	// 发送失败的信息保存的文件
	public static final String ERROR_FILE_PATH = "F:\\window\\Desktop\\";
	// 邮件标题
	public static final String MAIL_TITLE = "2017年5月《宜信财富尊享客户月报》";
	// sheet页坐标(注：第几个sheet页，从0开始)
	public static final Integer SHEET_INDEX = 0;
	// 邮箱坐标(注：第几列，从0开始)
	public static final Integer EMAIL_INDEX = 0;
	// lenderID坐标(注：第几列，从0开始)
	public static final Integer LENDERID_INDEX = 1;
	
	public static final String MAIL_REGEX = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
	/**
	 * <p>
	 * Des： 初始化邮件内容
	 * </p>
	 * 
	 * @author XQF SUI
	 * @created 2015年11月22日 下午5:16:20
	 * @return
	 */
	public static String initEmailInfo() {
		StringBuilder strs = new StringBuilder();
		
		strs.append("尊贵的宜信财富客户，您好：");
		strs.append("<br><br>&nbsp;&nbsp;");
		strs.append("我们很荣幸的向您发送6月的《宜信财富尊享客户月报》，精彩活动预告尽在其中，请下载附件中的PDF文件阅览。");
		strs.append("<br>&nbsp;&nbsp;");
		strs.append("如对其中活动感兴趣，请向理财顾问咨询，由他为您安排参与。活动有您，更加精彩！");
		strs.append("<br><br>&nbsp;&nbsp;");
		strs.append("宜信财富");
		strs.append("<br>&nbsp;&nbsp;");
		strs.append("您的全球资产配置专家");
		
		return strs.toString();
	}
	
	public static boolean wirteToFile(String errorInfo) throws IOException {
		
		String errorFile = ERROR_FILE_PATH + "email_send_error_" + UUID.randomUUID().toString().replace("-", "") + ".txt";
		
		File sqlFile = new File(errorFile);
		
		if (!sqlFile.exists()) {
			sqlFile.createNewFile();
		} else {
			sqlFile.delete();
			sqlFile.createNewFile();
		}
		
		FileWriter fileWritter = new FileWriter(sqlFile, true);
		PrintWriter printWriter = new PrintWriter(fileWritter);
		printWriter.println(errorInfo);
		fileWritter.flush();
		printWriter.close();
		fileWritter.close();
		
		System.out.println("文件：[ " + errorFile + " ]写入成功!");
		
		return true;
	}
	
	@SuppressWarnings("deprecation")
	public static String getCellValue(Cell cell) {
		if (cell != null)
			return cell.getCellType() == 1 ? cell.getStringCellValue().trim() : DF.format(cell.getNumericCellValue());
		else
			return "";
	}
	
	public static void main(String[] args) throws InvalidFormatException, IOException {
		
		int n = 1;
		String emailInfo = initEmailInfo(), mail = null;
		StringBuilder errorInfo = new StringBuilder("email\tlenderId\r\n");
		
		for (Row row : WorkbookFactory.create(new File(FILE_PATH)).getSheetAt(SHEET_INDEX)) {
			mail = getCellValue(row.getCell(EMAIL_INDEX));
			
			System.out.println(n++ + "\t" + mail);
			
			if (StringUtils.isNotBlank(mail) && Pattern.compile(MAIL_REGEX).matcher(mail).matches()) {
				EWSReaderMailUtils.doSendMail(MAIL_TITLE, mail, emailInfo, ATTR_FILE_PATH);
			} else {
				mail = StringUtils.isNotBlank(mail) ? mail : "空邮箱";
				errorInfo.append(mail).append("\t").append(getCellValue(row.getCell(LENDERID_INDEX))).append("\r\n");
			}
		}
		
		if (wirteToFile(errorInfo.toString())) {
			System.out.println("写入成功");
		} else {
			System.out.println("写入失败");
		}
	}
}
